package com.shujia.mr.scoreSort;

import com.shujia.mr.mapjoin.MapJoinDriver;
import com.shujia.mr.mapjoin.MapJoinMapper;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

public class ScoreSortDriver {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        Configuration conf = new Configuration();
        Job job = new Job(conf);
        job.setJobName("idea-ScoreSort");
        job.setJarByClass(ScoreSortDriver.class);

        // 2.告诉Job对应的Map和Reduce具体使用哪个类
        job.setMapperClass(ScoreSortMapper.class); // Class<? extends Mapper
//        job.setReducerClass(StudentReducer.class);

        // 3.告诉Job Map端输出的数据类型 和 Reduce端输出的数据类型(最终输出数据类型)
        // java.lang.ClassCastException: interface javax.xml.soap.Text 类型转换错误
        job.setMapOutputKeyClass(StudentSort.class);
        job.setMapOutputValueClass(NullWritable.class);

        job.setOutputKeyClass(StudentSort.class);
        job.setOutputValueClass(NullWritable.class);

        // 4.需要告诉MapReduce数据所在位置  输入数据位置  输出数据位置
        //   路径选择时需要注意：如果在IDEA中执行，那么路径是读取当前本地路径
//                              如果是在Hadoop集群中执行，那么需要设置HDFS中的路径


        FileInputFormat.addInputPath(job,new Path("hadoopCode/output/reduceJoin/part-r-00000")); // 学生基本信息数据
        FileOutputFormat.setOutputPath(job,new Path("hadoopCode/output/scoreSort")); //关联结果


        // 5.做代码提交
        //  在本地IDEA中执行，需要有Hadoop环境，并且能获取到winUtils
        //  Process finished with exit code 0  退出代码为0 并不代表当前任务执行成功
        job.waitForCompletion(true);
    }
}
